【書評】入門Terraform クラウド時代のインフラ統合管理
こんにちは!AWS事業本部の吉田です。
皆さん、IaCしていますか?
個人的な話ですが、私のIaCの入口はTerraformでした。
直近はCloudFormationを触ることが多かったのですが、近々Terraformを多く触ることになりそうなのでTerraformの復習をしている最中です。
Terraformの入門書である『入門Terraform クラウド時代のインフラ統合管理』を読了しましたので紹介します。
本書の概要
想定読者
- Terraformを初めて触る方
- HCP Terraformについて勉強したい方
コンテンツ
本書のハンズオンで利用するサンプルコードは、以下のリポジトリで公開されています。
本書の目次
- 第1章 Terraform概要
- 第2章 Terraformの基本的な操作
- 第3章 AWSで始めるTerraform
- 第4章 マルチクラウドでTerraformを活用
- 第5章 HCP Terraformを使ったチーム運用
- 第6章 モジュールの活用
- 第7章 さまざまなプロバイダー
- 第8章 SentinelによるPolicy as Codeの実践
- 付録
本書の内容
上記の目次に沿って各章の内容を簡単に紹介させていただきます。
第1章 Terraform概要
本章は、IaCツールを利用することのメリット、Terraformの他IaCツールとの違いについて解説しています。
Terraformの特徴として「マルチクラウド対応」を挙げておりますが、本書はその特徴を意識して執筆されている印象を受けました。
第2章 Terraformの基本的な操作
本章は、Docker上の環境構築を通じて、Terraformの基本コマンド・tfファイルの記述方法について解説しています。
クラウド環境上でTerraformを試すとなるとクラウド利用費が気になる所です。
そのハードルを下げるためにDocker上の環境構築を紹介している点は、とても素晴らしいと感じました。
本章の最後に解説されているフォーマットコマンドである「terraform fmt」は、今回初めて知りましたので積極的に活用しようと思います。
第3章 AWSで始めるTerraform
本章は、AWS上にWordPress環境を構築する一連の流れを解説しています。
WordPress環境は以下の構成となっています。
- ネットワーク(VPC・サブネット・インターネットゲートウェイ・ルートテーブル)
- セキュリティグループ
- EC2
- RDS
- WordPress(ユーザーデータを通じたセットアップスクリプト実行)
WordPress環境を構築したことがある方は、Terraformでの環境構築がすんなりと学べると思います。
初めてWordPress環境を構築する方は、AWS環境構築のいい勉強になると思います。
本章では、ローカル端末からのAWS環境を構築するにあたって、IAMユーザーのアクセスキーを発行して環境変数に設定する方法をとっております。
本書でも指摘している通り、アクセスキーの発行はアクセスキー流失というセキュリティリスクの恐れがあります。
本章の「3.6 AWSプロバイダーに権限を渡す方法」に、アクセスキーの環境変数設定以外の認証情報設定方法がまとめられていますので、AWS環境をデプロイする前に一読することをおすすめします。
個人的には、ローカル端末からのデプロイはスイッチロールを利用することをおすすめします。
私は、awsumeを利用してスイッチロールした後に本章の環境構築を進めました。
参考記事:
AssumeRole(スイッチロール)を理解して、AWSへのデプロイを少しでも安全に実施しよう
マネコン起動もできるAWSのスイッチロール用CLIツール「AWSume」の紹介
第4章 マルチクラウドでTerraformを活用
本章では、3章で構築したWordPress環境をAzure・GCP上でも構築します。
Terraformの強みであるマルチクラウド対応について、実際の環境構築を通じて実感することができます。
第5章 HCP Terraformを使ったチーム運用
本章は、チーム運用を円滑にするSaaS製品、HCP Terraformを解説しております。
私のリサーチ不足かもしれませんが、HCP Terraformについて解説している書籍は少ない印象です。
したがって、本章が本書の目玉だと私は考えております。
本章は、HCP Terraformのサインアップ・ステートファイルの移行、コードのリモート実行(HCP Terraform上でのコード実行)などを丁寧に解説されております。
個人的に一番便利だと感じたのは、VCS(GitHubなどのバージョン管理システム)との連携です。
本章ではGitHubのリポジトリの連携を解説しております。
GitHubのリポジトリと連携し、リポジトリが更新されると自動的にPlan(terraform plan)が実行されるようになります。
Plan後のApply(terraform apply)に関しては、HCP Terraform上で手動で実行もできますし、自動的にApplyを実行するように設定することができます。
このようにHCP Terraformを活用することで、インフラのCI/CDパイプラインを非常に簡単に作成することができます。
HCP TerraformのCI/CDパイプラインは知識としてはありましたが、実際に利用してみるとその便利さを身に染みて実感しました。
本章も、コードのリモート実行(HCP Terraform上でのコード実行)のために、HCP TerraformにIAMユーザーのアクセスキーを設定しております。
付録の「A.1 Dynamic Provider Credentials」にて、OIDCを利用した動的なクレデンシャル生成について解説していますので、デプロイ前に一読することをおすすめします。
第6章 モジュールの活用
本章は、コードの肥大化防止・再利用可能するために重要なモジュールについて解説しております。
モジュールの概要・メリット・ベストプラクティスを解説した後に、第3章で作成したWordPress環境用のコードをモジュール化していきます。
モジュール作成に留まらず、HashiCorp Learnのサンプルコードを利用して、
HCP Terraformのプライベートモジュールレジストリへモジュールを登録する一連の流れも学習することができます。
プライベートモジュールレジストリへのモジュール登録と合わせて、No-Code Provisioning機能も紹介されております。
No-Code Provisioning機能とは、AWSのCloudFormationのようにパラメータ値を渡せば、GUI上でインフラデプロイが完結する機能です。
(HCP Terraform Plus Editionのみ利用可能)
インフラのセルフサービス化を促進することが出来る非常に便利な機能であり、改めてHCP Terraformの凄さを感じました。
第7章 さまざまなプロバイダー
本章は、クラウドや様々な周辺サービス(CDNやモニタリングサービスなど)を管理するためのプラグインであるプロバイダーについて解説しています。
Terraformプロバイダーの公式リポジトリであるTerraform Registryの紹介と、
いくつかのプロバイダー(Docker、TFE、Fastly、Datadogなど)が紹介されています。
クラウドのみならず、様々な製品とも連携できるTerraformの強みがアピールされていると思います。
第8章 SentinelによるPolicy as Codeの実践
本章は、Sentinelを利用したPolicy as Codeの実装について解説しています。
Policy as Code(PaC)とは、セキュリティ・コンプラアンスなどの遵守したいポリシーをIaCと同じようにコードとして管理する考え方です。
HCP Terraform上でPaC機能を利用しますと、デプロイ前にポリシーチェックを行い、ポリシーに違反した場合はデプロイが失敗します。
Policy as Codeを実装するツールとしてSentinelとOPAがありますが、本書ではSentinelを中心に解説しています。
Sentinelの記述方法、テストケースによるポリシーテストなどSentinelの基本的な機能を学べます。
実践的なポリシー実装としては、プロビジョナーを禁止するポリシーとTerraformのバージョンを制限するポリシーが紹介されています。
Sentinelのさまざまなサンプルコードを公開しているリポジトリがありますので、実際にSentinelを実装する際はこのサンプルコードをカスタマイズすることをおすすめされております。
最後に
Terraformについてわかりやすく解説されており、ハンズオンも充実しております。
そして、HCP Terraformについて解説した数少ない書籍ですので、これからHCP Terraformを使うことになる方・チーム開発に導入したい方はぜひ本書を手に取っていただきたいです!
以上、AWS事業本部の吉田でした!